// MySingleLock.cpp: implementation of the CMySingleLock class.
#include "stdafx.h"
#include "MySingleLock.h"

// =====================================================================================================================
//    Construction/Destruction
// =====================================================================================================================
CMySingleLock::CMySingleLock(ILockObj *pLock)
{
	m_lock = pLock;
	m_lock->Lock();
}

// =====================================================================================================================
// =======================================================================================================================
CMySingleLock::~CMySingleLock()
{
	m_lock->Unlock();
}

// =====================================================================================================================
// =======================================================================================================================
CMyCriticalSection::CMyCriticalSection()
{
	InitializeCriticalSection(&m_CritSec);
}

// =====================================================================================================================
// =======================================================================================================================
CMyCriticalSection::~CMyCriticalSection()
{
	DeleteCriticalSection(&m_CritSec);
}

// =====================================================================================================================
// =======================================================================================================================
void CMyCriticalSection::Lock(void)
{
	EnterCriticalSection(&m_CritSec);
}

// =====================================================================================================================
// =======================================================================================================================
void CMyCriticalSection::Unlock(void)
{
	LeaveCriticalSection(&m_CritSec);
}

CMyMutex::CMyMutex(const wchar_t *pszName)
{
	m_hMutex = ::CreateMutex(NULL, FALSE, pszName);
}

CMyMutex::~CMyMutex()
{
	if (m_hMutex)
	{
		CloseHandle(m_hMutex);
	}
}

void CMyMutex::Lock(void)
{
	if (m_hMutex)
	{
		WaitForSingleObject(m_hMutex, INFINITE);
	}
}

void CMyMutex::Unlock(void)
{
	if (m_hMutex)
	{
		ReleaseMutex(m_hMutex);
	}
}
